From: Florian Müllner Date: Fri, 3 Jan 2025 23:17:53 +0000 (+0100) Subject: runDialog: Require matching key-press for ESC shortcut X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~177^2^2~13 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2580bfe2d59d53ebf24f611ac33382f3397dcdb3;p=gnome-shell.git runDialog: Require matching key-press for ESC shortcut Both popover menus and dialogs can be dismissed with the Escape key, however the former triggers on key press, while the latter triggers on key release. As a result, the same key press+release can dismiss both the command entry's context menu and the run dialog itself. Fix this by only triggering a key shortcut when a matching key press was recorded before, which matches how Dialog handles button shortcuts. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8132 Part-of: (cherry picked from commit 9b9191e8585025eb038d08fa63227f46a4b22cb8) --- diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js index 970dedd67..7e32d74bb 100644 --- a/js/ui/runDialog.js +++ b/js/ui/runDialog.js @@ -82,6 +82,7 @@ class RunDialog extends ModalDialog.ModalDialog { content.add_child(this._descriptionLabel); this._commandError = false; + this._pressedKey = null; this._pathCompleter = new Gio.FilenameCompleter(); @@ -120,8 +121,19 @@ class RunDialog extends ModalDialog.ModalDialog { }); } + vfunc_key_press_event(event) { + this._pressedKey = event.get_key_symbol(); + } + vfunc_key_release_event(event) { - if (event.get_key_symbol() === Clutter.KEY_Escape) { + const pressedKey = this._pressedKey; + this._pressedKey = null; + + const key = event.get_key_symbol(); + if (key !== pressedKey) + return Clutter.EVENT_PROPAGATE; + + if (key === Clutter.KEY_Escape) { this.close(); return Clutter.EVENT_STOP; }